#ifndef __WEAK_PTR_H__
#define __WEAK_PTR_H__

#include "shared_ptr.h"

namespace wqc
{

// 由于shared_ptr存在循环引用的问题
// A --> B
// B --> A
// 导致资源无法正常的释放
// 引入weak_ptr可以解决循环引用问题
// 只使用内存，但不管理内存
template <typename TYPE>
class weak_ptr
{
public:
    weak_ptr():
        m_ptr(nullptr)
    {

    }

    weak_ptr(const shared_ptr<TYPE>& sp):
        m_ptr(sp.get())
    {

    }

    weak_ptr<TYPE>& operator=(const shared_ptr<TYPE>& sp)
    {
        m_ptr = sp.get();

        return *this;
    }

private:
    TYPE* m_ptr;
};
}

#endif /* end of __WEAK_PTR_H__ */